package com.istock.union.user.service;

import com.istock.base.serializer.json.TypeReference;

/**
 * 登录信息的存储服务
 * 一般有几个实现
 * SessionStorageService,将登录信息存储在session里面,可以不依赖于任何外部组件,需要开启session和nginx的会话保持
 * BaseCacheStorageService,将登录信息保存在cache里面,针对小型应用,可以支持ehcache,redis,memcached,不需要开启session
 * @author senvon
 *
 */
public interface StorageService {

	/**获得一个存储的信息,如果不存在,返回null
	 * @param key
	 * @param clazz
	 * @return
	 */
	public <T> T getObject(String token , String key , TypeReference<T> typeReference);
	
	/**存储一个信息
	 * 该方法为session的替代,跟随token失效实现
	 * 使用默认token的过期时间
	 * @param token 当前的token
	 * @param key 存储的key
	 * @param obj 存储的对象
	 */
	public void putObject(String token ,String key , Object obj);
	
	/**存储一个信息
	 * @param token 当前的token
	 * @param key 存储的key
	 * @param obj 存储的对象
	 * @param expireSecond 过期时间
	 */
	public void putObject(String token ,String key , Object obj , Long expireSecond);
	
	/**移除一个信息
	 * @param key
	 */
	public void removeObject(String token,String key);
	
	/**
	 * 移除所有信息
	 */
	public void removeAll(String token);
}
